from django.http import HttpResponse
from django.shortcuts import render
from book.models import BookInfo
from django.http import JsonResponse


# Create your views here.
def create_book(request):
    book = BookInfo.objects.create(
        name='abc',
        pub_date='2020-1-1',
        readcount=333,
    )

    return HttpResponse("create")


# keyword传参
def test1(request, pram1, pram2):
    query_prams = request.GET
    # QueryDict: {'order': ['readcount']} 具有字典的特效，还具有一键多值的特点 但是GET只能取最后一个值，所以要用getlist
    order = query_prams.getlist('order')  # 将list遍历出来
    for i in order:
        print(i)

    return HttpResponse("test1")


# 传递form表单
def register(request):
    username = request.POST['username'],
    passwd = request.POST['password'],
    print(username[0])
    print(passwd[0])
    return HttpResponse("ok")


# 传递json数据
def register_json(request):
    data = request.body.decode('utf8')
    """
        {
        "name" : "bzq",
        "passwd" : 11111111}
        这是一个字符串，要正则匹配
        """

    import json
    data_dict = json.loads(data)

    username = data_dict['name'],
    passwd = data_dict['passwd'],
    print(username[0])
    print(passwd[0])
    print(request.META['PATH_INFO'])
    return HttpResponse("ok")


def res(request):
    # response = HttpResponse("RES", status=200)
    # response['name'] = 'bzq'
    # dict --> json
    info = {
        'name': 'bzq',
        'address': 'shanhai'
    }
    response = JsonResponse(data=info)

    return response


###############    cookie     ###################
"""
查询字符串

https://ip:port/path/path/?key=value&key1=value1

url 以? 为分割 分为两部分
? 前边为请求路径
? 后边为查询字符串  查询字符串类似于字典 key = value 多个数据&链接
"""

"""
第一次请求,携带 查询字符串
http://127.0.0.1:8000/set_cookie/?username=bzq&passwd=1223
服务器接收到请求后，获取usename，服务器设置cookie信息，cookie信息包括username
浏览器接收到服务器的响应后，应该把cookie保存起来

第二次及其之后的请求，我们访问http://127.0.0.1:8000都会携带cookie信息，服务器就可以获取cookie信息来判断用户身份
"""


def set_cookie(request):
    # 1 获取查询字符串数据
    username = request.GET.get('username')
    passwd = request.GET.get('passwd')
    # 2 服务器设置cookie信息
    # 是通过响应对象.set_cookie设定
    response = HttpResponse('set_cookie')

    # key, value=
    # max_age是一个秒数
    response.set_cookie('name', username, max_age=60 * 60 * 24 * 7)
    response.set_cookie('pwd', passwd, max_age=60 * 60 * 24 * 7)

    # response.delete_cookie('name') 删除cookie

    return response


def get_cookie(request):
    print(request.COOKIES)
    name = request.COOKIES.get('name')
    return HttpResponse(name)


####################### session #################################

# session保存在服务器端  -- 数据相对安全
# session需要依赖cookie

"""

第一次请求http://127.0.0.1:8000/set_cookie?username=bzq&passwd=123。 在服务器端设置session信息
服务器会同时生成一个sessionid的cookie信息
浏览器接收到这个信息后，会把cookie数据保存起来

第二次及其之后的请求，都会携带这个sessionid，服务器会验证这个sessionid，验证没有问题会读取相关数据。实现业务逻辑

"""


def set_session(request):
    # 1. 模拟，获取用户信息
    username = request.GET.get('username')

    # 2. 设置session信息
    # 假如 我们通过模型查询 查询到了用户的信息
    user_id = 1
    request.session['user_id'] = user_id
    request.session['username'] = username
    return HttpResponse('set_session')

    # clear 删除session里面的数据，但是key保留
    # flush 是删除所有的内容，key/value都被删除


def get_session(request):
    user_id = request.session['user_id']
    username = request.session['username']

    content = "{}, {}".format(user_id, username)

    return HttpResponse(content)


###################### 类视图 #######################

def login(request):
    if request.method == 'GET':
        return HttpResponse('GET逻辑')
    else:
        return HttpResponse('POST逻辑')


"""
类视图定义

class 类视图名字（view）:
    def get(self, request):
        return HttpResponse(")
    def http_method_lower(self, request):
        :return HttpResponse('xxx')
1. 继承自view
"""
from django.views import View


class LoginView(View):

    def get(self, request):
        return HttpResponse('GET IT')

    def post(self, request):
        return HttpResponse('POST IT')
